#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include <time.h>
#include <unistd.h>
#include <sys/timeb.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <fcntl.h> // file option
#include <dirent.h>
#include <pthread.h>

//g++ -o test test.cpp -pthread -O3
#if 0
volatile int myval = 0;//该易变变量不会被优化
#else
// 在linux应用基本不用考虑这个情况。
// 如果while(!myval) usleep(1000);也不会死循环。
// 操作外围设配接口寄存器可能会用到while();，所以寄存器基本都是volatile标志。
int myval = 0;//使用-O3优化后，while(!myval);被永远阻塞。
#endif
void *pthrFunc(void *vp)
{
    sleep(1);
    myval = 1;
    sleep(1);
    return NULL;
}
int main()
{
    // std::thread tmpthread = std::thread(pthrFunc);
    pthread_t tmpfd;
    pthread_create(&tmpfd, NULL, pthrFunc, NULL);
    printf("begin!\n");
    while(!myval);
    printf("finish!\n");
    pthread_join(tmpfd, NULL);
}